home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Tools / Languages / GCC 1.37.1r14 / BSD #includes / sys / sys⁄disklabel.h < prev    next >
Encoding:
Text File  |  1992-09-04  |  10.2 KB  |  316 lines  |  [TEXT/UNIX]

  1. /*
  2.  * Copyright (c) 1987, 1988 Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice, this list of conditions and the following disclaimer in the
  12.  *    documentation and/or other materials provided with the distribution.
  13.  * 3. All advertising materials mentioning features or use of this software
  14.  *    must display the following acknowledgement:
  15.  *    This product includes software developed by the University of
  16.  *    California, Berkeley and its contributors.
  17.  * 4. Neither the name of the University nor the names of its contributors
  18.  *    may be used to endorse or promote products derived from this software
  19.  *    without specific prior written permission.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31.  * SUCH DAMAGE.
  32.  *
  33.  *    @(#)disklabel.h    7.19 (Berkeley) 5/7/91
  34.  */
  35.  
  36. /*
  37.  * Disk description table, see disktab(5)
  38.  */
  39. #define    _PATH_DISKTAB    "/etc/disktab"
  40. #define    DISKTAB        "/etc/disktab"        /* deprecated */
  41.  
  42. /*
  43.  * Each disk has a label which includes information about the hardware
  44.  * disk geometry, filesystem partitions, and drive specific information.
  45.  * The label is in block 0 or 1, possibly offset from the beginning
  46.  * to leave room for a bootstrap, etc.
  47.  */
  48.  
  49. /* XXX these should be defined per controller (or drive) elsewhere, not here! */
  50. #ifdef i386
  51. #define LABELSECTOR    1            /* sector containing label */
  52. #define LABELOFFSET    0            /* offset of label in sector */
  53. #endif
  54.  
  55. #ifndef    LABELSECTOR
  56. #define LABELSECTOR    0            /* sector containing label */
  57. #endif
  58.  
  59. #ifndef    LABELOFFSET
  60. #define LABELOFFSET    64            /* offset of label in sector */
  61. #endif
  62.  
  63. #define DISKMAGIC    ((u_long) 0x82564557)    /* The disk magic number */
  64. #ifndef MAXPARTITIONS
  65. #define    MAXPARTITIONS    8
  66. #endif
  67.  
  68.  
  69. #ifndef LOCORE
  70. struct disklabel {
  71.     u_long    d_magic;        /* the magic number */
  72.     short    d_type;            /* drive type */
  73.     short    d_subtype;        /* controller/d_type specific */
  74.     char    d_typename[16];        /* type name, e.g. "eagle" */
  75.     /* 
  76.      * d_packname contains the pack identifier and is returned when
  77.      * the disklabel is read off the disk or in-core copy.
  78.      * d_boot0 and d_boot1 are the (optional) names of the
  79.      * primary (block 0) and secondary (block 1-15) bootstraps
  80.      * as found in /usr/mdec.  These are returned when using
  81.      * getdiskbyname(3) to retrieve the values from /etc/disktab.
  82.      */
  83. #if defined(KERNEL) || defined(STANDALONE)
  84.     char    d_packname[16];            /* pack identifier */ 
  85. #else
  86.     union {
  87.         char    un_d_packname[16];    /* pack identifier */ 
  88.         struct {
  89.             char *un_d_boot0;    /* primary bootstrap name */
  90.             char *un_d_boot1;    /* secondary bootstrap name */
  91.         } un_b; 
  92.     } d_un; 
  93. #define d_packname    d_un.un_d_packname
  94. #define d_boot0        d_un.un_b.un_d_boot0
  95. #define d_boot1        d_un.un_b.un_d_boot1
  96. #endif    /* ! KERNEL or STANDALONE */
  97.             /* disk geometry: */
  98.     u_long    d_secsize;        /* # of bytes per sector */
  99.     u_long    d_nsectors;        /* # of data sectors per track */
  100.     u_long    d_ntracks;        /* # of tracks per cylinder */
  101.     u_long    d_ncylinders;        /* # of data cylinders per unit */
  102.     u_long    d_secpercyl;        /* # of data sectors per cylinder */
  103.     u_long    d_secperunit;        /* # of data sectors per unit */
  104.     /*
  105.      * Spares (bad sector replacements) below
  106.      * are not counted in d_nsectors or d_secpercyl.
  107.      * Spare sectors are assumed to be physical sectors
  108.      * which occupy space at the end of each track and/or cylinder.
  109.      */
  110.     u_short    d_sparespertrack;    /* # of spare sectors per track */
  111.     u_short    d_sparespercyl;        /* # of spare sectors per cylinder */
  112.     /*
  113.      * Alternate cylinders include maintenance, replacement,
  114.      * configuration description areas, etc.
  115.      */
  116.     u_long    d_acylinders;        /* # of alt. cylinders per unit */
  117.  
  118.             /* hardware characteristics: */
  119.     /*
  120.      * d_interleave, d_trackskew and d_cylskew describe perturbations
  121.      * in the media format used to compensate for a slow controller.
  122.      * Interleave is physical sector interleave, set up by the formatter
  123.      * or controller when formatting.  When interleaving is in use,
  124.      * logically adjacent sectors are not physically contiguous,
  125.      * but instead are separated by some number of sectors.
  126.      * It is specified as the ratio of physical sectors traversed
  127.      * per logical sector.  Thus an interleave of 1:1 implies contiguous
  128.      * layout, while 2:1 implies that logical sector 0 is separated
  129.      * by one sector from logical sector 1.
  130.      * d_trackskew is the offset of sector 0 on track N
  131.      * relative to sector 0 on track N-1 on the same cylinder.
  132.      * Finally, d_cylskew is the offset of sector 0 on cylinder N
  133.      * relative to sector 0 on cylinder N-1.
  134.      */
  135.     u_short    d_rpm;            /* rotational speed */
  136.     u_short    d_interleave;        /* hardware sector interleave */
  137.     u_short    d_trackskew;        /* sector 0 skew, per track */
  138.     u_short    d_cylskew;        /* sector 0 skew, per cylinder */
  139.     u_long    d_headswitch;        /* head switch time, usec */
  140.     u_long    d_trkseek;        /* track-to-track seek, usec */
  141.     u_long    d_flags;        /* generic flags */
  142. #define NDDATA 5
  143.     u_long    d_drivedata[NDDATA];    /* drive-type specific information */
  144. #define NSPARE 5
  145.     u_long    d_spare[NSPARE];    /* reserved for future use */
  146.     u_long    d_magic2;        /* the magic number (again) */
  147.     u_short    d_checksum;        /* xor of data incl. partitions */
  148.  
  149.             /* filesystem and partition information: */
  150.     u_short    d_npartitions;        /* number of partitions in following */
  151.     u_long    d_bbsize;        /* size of boot area at sn0, bytes */
  152.     u_long    d_sbsize;        /* max size of fs superblock, bytes */
  153.     struct    partition {        /* the partition table */
  154.         u_long    p_size;        /* number of sectors in partition */
  155.         u_long    p_offset;    /* starting sector */
  156.         u_long    p_fsize;    /* filesystem basic fragment size */
  157.         u_char    p_fstype;    /* filesystem type, see below */
  158.         u_char    p_frag;        /* filesystem fragments per block */
  159.         u_short    p_cpg;        /* filesystem cylinders per group */
  160.     } d_partitions[MAXPARTITIONS];    /* actually may be more */
  161. };
  162. #else LOCORE
  163.     /*
  164.      * offsets for asm boot files.
  165.      */
  166.     .set    d_secsize,40
  167.     .set    d_nsectors,44
  168.     .set    d_ntracks,48
  169.     .set    d_ncylinders,52
  170.     .set    d_secpercyl,56
  171.     .set    d_secperunit,60
  172.     .set    d_end_,276        /* size of disk label */
  173. #endif LOCORE
  174.  
  175. /* d_type values: */
  176. #define    DTYPE_SMD        1        /* SMD, XSMD; VAX hp/up */
  177. #define    DTYPE_MSCP        2        /* MSCP */
  178. #define    DTYPE_DEC        3        /* other DEC (rk, rl) */
  179. #define    DTYPE_SCSI        4        /* SCSI */
  180. #define    DTYPE_ESDI        5        /* ESDI interface */
  181. #define    DTYPE_ST506        6        /* ST506 etc. */
  182. #define    DTYPE_FLOPPY        10        /* floppy */
  183.  
  184. #ifdef DKTYPENAMES
  185. static char *dktypenames[] = {
  186.     "unknown",
  187.     "SMD",
  188.     "MSCP",
  189.     "old DEC",
  190.     "SCSI",
  191.     "ESDI",
  192.     "ST506",
  193.     "type 7",
  194.     "type 8",
  195.     "type 9",
  196.     "floppy",
  197.     0
  198. };
  199. #define DKMAXTYPES    (sizeof(dktypenames) / sizeof(dktypenames[0]) - 1)
  200. #endif
  201.  
  202. /*
  203.  * Filesystem type and version.
  204.  * Used to interpret other filesystem-specific
  205.  * per-partition information.
  206.  */
  207. #define    FS_UNUSED    0        /* unused */
  208. #define    FS_SWAP        1        /* swap */
  209. #define    FS_V6        2        /* Sixth Edition */
  210. #define    FS_V7        3        /* Seventh Edition */
  211. #define    FS_SYSV        4        /* System V */
  212. #define    FS_V71K        5        /* V7 with 1K blocks (4.1, 2.9) */
  213. #define    FS_V8        6        /* Eighth Edition, 4K blocks */
  214. #define    FS_BSDFFS    7        /* 4.2BSD fast file system */
  215. #define    FS_MSDOS    8        /* MSDOS file system */
  216.  
  217. #ifdef    DKTYPENAMES
  218. static char *fstypenames[] = {
  219.     "unused",
  220.     "swap",
  221.     "Version 6",
  222.     "Version 7",
  223.     "System V",
  224.     "4.1BSD",
  225.     "Eighth Edition",
  226.     "4.2BSD",
  227.     "MSDOS",
  228.     0
  229. };
  230. #define FSMAXTYPES    (sizeof(fstypenames) / sizeof(fstypenames[0]) - 1)
  231. #endif
  232.  
  233. /*
  234.  * flags shared by various drives:
  235.  */
  236. #define        D_REMOVABLE    0x01        /* removable media */
  237. #define        D_ECC        0x02        /* supports ECC */
  238. #define        D_BADSECT    0x04        /* supports bad sector forw. */
  239. #define        D_RAMDISK    0x08        /* disk emulator */
  240. #define        D_CHAIN        0x10        /* can do back-back transfers */
  241.  
  242. /*
  243.  * Drive data for SMD.
  244.  */
  245. #define    d_smdflags    d_drivedata[0]
  246. #define        D_SSE        0x1        /* supports skip sectoring */
  247. #define    d_mindist    d_drivedata[1]
  248. #define    d_maxdist    d_drivedata[2]
  249. #define    d_sdist        d_drivedata[3]
  250.  
  251. /*
  252.  * Drive data for ST506.
  253.  */
  254. #define d_precompcyl    d_drivedata[0]
  255. #define d_gap3        d_drivedata[1]        /* used only when formatting */
  256.  
  257. /*
  258.  * Drive data for SCSI.
  259.  */
  260. #define    d_blind        d_drivedata[0]
  261.  
  262. #ifndef LOCORE
  263. /*
  264.  * Structure used to perform a format
  265.  * or other raw operation, returning data
  266.  * and/or register values.
  267.  * Register identification and format
  268.  * are device- and driver-dependent.
  269.  */
  270. struct format_op {
  271.     char    *df_buf;
  272.     int    df_count;        /* value-result */
  273.     daddr_t    df_startblk;
  274.     int    df_reg[8];        /* result */
  275. };
  276.  
  277. /*
  278.  * Structure used internally to retrieve
  279.  * information about a partition on a disk.
  280.  */
  281. struct partinfo {
  282.     struct disklabel *disklab;
  283.     struct partition *part;
  284. };
  285.  
  286. /*
  287.  * Disk-specific ioctls.
  288.  */
  289.         /* get and set disklabel; DIOCGPART used internally */
  290. #define DIOCGDINFO    _IOR('d', 101, struct disklabel)/* get */
  291. #define DIOCSDINFO    _IOW('d', 102, struct disklabel)/* set */
  292. #define DIOCWDINFO    _IOW('d', 103, struct disklabel)/* set, update disk */
  293. #define DIOCGPART    _IOW('d', 104, struct partinfo)    /* get partition */
  294.  
  295. /* do format operation, read or write */
  296. #define DIOCRFORMAT    _IOWR('d', 105, struct format_op)
  297. #define DIOCWFORMAT    _IOWR('d', 106, struct format_op)
  298.  
  299. #define DIOCSSTEP    _IOW('d', 107, int)    /* set step rate */
  300. #define DIOCSRETRIES    _IOW('d', 108, int)    /* set # of retries */
  301. #define DIOCWLABEL    _IOW('d', 109, int)    /* write en/disable label */
  302.  
  303. #define DIOCSBAD    _IOW('d', 110, struct dkbad)    /* set kernel dkbad */
  304.  
  305. #endif LOCORE
  306.  
  307. #if !defined(KERNEL) && !defined(LOCORE)
  308.  
  309. #include <sys/cdefs.h>
  310.  
  311. __BEGIN_DECLS
  312. struct disklabel *getdiskbyname __P((const char *));
  313. __END_DECLS
  314.  
  315. #endif
  316.